package com.briup.cms.service.impl;

import com.briup.cms.bean.Group;
import com.briup.cms.dao.GroupMapper;
import com.briup.cms.dao.extend.GroupExtendMapper;
import com.briup.cms.exception.CustomerException;
import com.briup.cms.service.IGroupService;
import com.briup.cms.utils.MessageStatus;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 14433
 */
@Service
public class GroupServiceImpl implements IGroupService {

    @Autowired
    private GroupMapper groupMapper;
    @Autowired
    private GroupExtendMapper groupExtendMapper;

    /**
     * 查询所有用户组信息
     * @return 查询到的用户组信息
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Override
    public List<Group> findAllGroups() throws CustomerException {
        //service层的方法进行业务逻辑处理，用需要的话可以调用dao层代码，和数据库交互
        List<Group> list=groupExtendMapper.findAll();
        //把service层的结果返回给web层的Controller
        return list;
    }

    /**
     *通过id查询用户组信息
     * @param id 组id
     * @return 用户组信息
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Override
    public Group findGroupById(Integer id) throws CustomerException {
        //如果参数为空的话，抛出异常信息
        //MessageStatus类中，已经提前定义好了各种各样的异常
        if(id==null)
            throw new CustomerException(MessageStatus.PARAM_IS_BLANK);
        Group group=groupMapper.selectByPrimaryKey(id);
        return group;
    }

    /**
     *新增用户组信息
     * @param group 新增的组信息对象
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Transactional//表示当前方法需要事务支持
    @Override
    public void insertGroup(Group group) throws CustomerException {
        if(group==null)
            throw new CustomerException(MessageStatus.PARAM_IS_BLANK);
        groupMapper.insertSelective(group);
    }

    /**
     * 更新用户组信息
     * @param group 需要更新的用户组对象
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Transactional//表示当前方法需要事务支持
    @Override
    public void updateGroup(Group group) throws CustomerException {
        //如果id不存在，则抛出异常
        if(group.getGroupId() == null)
            throw new CustomerException(MessageStatus.PARAM_IS_BLANK);
        groupMapper.updateByPrimaryKeySelective(group);
    }

    /**
     * 通过id删除用户组信息
     * @param id 组id
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Override
    public void deleteById(Integer id) throws CustomerException {
        // 如果删除为空，那么就抛出异常
        if(id == null)
            throw new CustomerException(MessageStatus.PARAM_IS_BLANK);
        groupMapper.deleteByPrimaryKey(id);
    }

    /**
     *分页查询所有的用户组信息
     * @param pageNum   第几页
     * @param pageSize  每页第几条
     * @return 分页对象
     * @throws CustomerException 方法中可能会抛出CustomerException类型异常
     */
    @Override
    public PageInfo<Group> findGroupByPage(int pageNum, int pageSize) throws CustomerException {
        //设置分页信息
        PageHelper.startPage(pageNum,pageSize,true);
        //查询所有的数据
        List<Group> list=groupExtendMapper.findAll();
        //把数据包装到PageInfo当中
        return new PageInfo<>(list);
    }

}
